MCU STM32f207 ADC+DMA多通道采集,ADC数据大于4096

这周做stm32f207的ADC时,发现ADC采集到的原始数据可以超过4096,有的已经65000了。
stm32的ADC只有12位,最大4095,怎么可能超过4096呢。
肯定是数据错位的问题了,我在ADC的初始化程序中,设定其数据对齐模式为右对齐,应该没问题的啊,
百思得得其解,开始仿真,发现,ADC_InitStructure中的某些数完全是错误的,
我仿真观察变量ADC_InitStructure.ExternalTrigconv ,一建立结构体,这个成员的值就变成了0x08007A47,
最后赋值给CR2的时候,第11位也就是数据对其位 就是1 了,左对齐。。。
为什么会这样呢,我特意在初始化中将ADC_InitStructure.ExternalTrigconv=ExternalTrigconv_none.
也就是将他赋值为0,然而即使程序已经执行过这条语句,这个成员变量的值仍然是0x08007A47,
太奇怪了,可能是固件库的bug,08007A47看起来倒像是flash地址了。

忽然想起有一个ADC_DInit()Structure_Init(),这两个函数能将ADC配置为RESET状态,
我就将这两个函数直接加载ADC初始化的所有语句之前,再次仿真,直接正常将数据对其设置为0,也就是右对齐了。输出的数据也正常了。
keil真的很强大,可以仿真的时候,自己实时改变某些外设的寄存器值来观察效果。
STM32固件库在某些情况下,确实会出现这种完全无法解释的bug,之后的工作中又遇到一次了。